package com.cty.B_SpecialDataStructures.B_Queue.QueueChain;

import com.cty.F_common.DataItem;

/**
 * @Auther: cty
 * @Date: 2020/6/14 11:33
 * @Description: 双端链表实现栈
 * 应用场景：
 *      数据量可预测或内存充足时使用
 * 重要操作：
 *      ① peek(): DataItem    O(1)
 *      ② insert(DataItem): void    O(1)
 *      ③ remove(): DataItem    O(1)
 * @version: 1.0
 */
public class QueueChain {
    private FirstLastList list;

    public QueueChain(){
        list = new FirstLastList();
    }

    public boolean isEmpty(){
        return list.isEmpty();
    }

    public void displayQueue(){
        list.displayList();
    }

    /**
     * 查看队头    O(1)
     * @return
     */
    public DataItem peek(){
        if(isEmpty())
            return null;

        return list.getFirst().data;
    }  // end peek()

    /**
     * 在队尾插入    O(1)
     * @param item
     */
    public void insert(DataItem item){
        list.insertLast(item);
    }  // end insert()

    /**
     * 在队头删除    O(1)
     * @return
     */
    public DataItem remove(){
        return list.deleteFirst();
    }  // end remove()

}  // end QueueChain{}
